/**
 * src/tools/index.ts
 * 工具注册中心 - 自动化发现与管理
 * 遵循单一数据源原则，从工具实例中聚合信息
 */

import { ExecuteCommandTool } from './executeCommandTool';
import type { ToolHandler } from './base';
import type { ToolDefinition } from '../types/types';

// ============================================================
// 1. 实例化所有工具
// 在这里注册新工具，只需将实例加入数组即可
// ============================================================
const tools: ToolHandler[] = [
    new ExecuteCommandTool()
];

// ============================================================
// 2. 构建映射表 (用于快速查找)
// ============================================================
const toolMap = new Map<string, ToolHandler>();
tools.forEach(tool => {
    if (toolMap.has(tool.getId())) {
        console.warn(`Duplicate tool ID found: ${tool.getId()}`);
    }
    toolMap.set(tool.getId(), tool);
});

// ============================================================
// 3. 导出公共访问接口
// ============================================================

/**
 * 获取所有可用工具的 UI 定义列表
 * (替代原 src/components/toolRegistry.ts 的功能)
 */
export function getToolList(): ToolDefinition[] {
    return tools.map(tool => tool.getDefinition());
}

/**
 * 根据 ID 获取工具执行器
 * 用于 AgentToolService 查找并执行工具
 */
export function getToolHandler(id: string): ToolHandler | undefined {
    return toolMap.get(id);
}

/**
 * 获取所有工具实例
 * (供调试或系统内部遍历使用)
 */
export function getAllTools(): ToolHandler[] {
    return [...tools];
}